package com.registration.service;

import com.registration.bean.OrderBean;

import java.util.List;

public interface OrderService {
    /**
     * 创建挂号订单（含号源校验和锁定）
     * @param order 订单信息（RegistrationOrderBean）
     * @return 订单ID
     */
    OrderBean createRegistrationOrder(OrderBean order);

    /**
     * 根据用户ID和状态筛选订单列表
     * @param userId 用户ID
     * @param orderStatus 订单状态（null=全部）
     * @return 订单列表（RegistrationOrderBean）
     */
    List<OrderBean> getOrdersByUserId(Integer userId, Integer orderStatus);

    /**
     * 取消挂号订单（含号源恢复）
     * @param orderId 订单ID
     * @param userId 用户ID（验证权限）
     * @return 是否取消成功
     */
    boolean cancelOrder(Integer orderId, Integer userId);

    /**
     * 挂号改期（更换排班）
     * @param orderId 订单ID
     * @param newScheduleId 新排班ID
     * @param userId 用户ID（验证权限）
     * @return 是否改期成功
     */
    boolean rescheduleOrder(Integer orderId, Integer newScheduleId, Integer userId);

    /**
     * 根据订单ID查询订单详情（含关联的患者、科室、医生名称）
     * @param orderId 订单ID
     * @return 订单Bean，不存在则返回null
     */
    OrderBean selectOrderDetailById(Integer orderId);


    List<OrderBean> selectOrdersByPatientId(Integer patientId, Integer orderStatus);


    /**
     * 根据患者ID查询订单列表（含关联的医生、科室名称）
     * @param patientId 患者ID
     * @return 订单列表（OrderBean）
     */
    List<OrderBean> selectOrdersByPatientId(Integer patientId);


    /**
     * 验证订单是否存在
     * @param orderId 订单ID
     * @return 订单Bean，不存在则返回null
     */
    OrderBean getOrderById(Integer orderId);




    /**
     * 根据user_id查询就诊记录（含关联的患者、科室、医生名称）
     * @param user_id 用户ID
     * @return 订单Bean，不存在则返回null
     */
    List<OrderBean> selectVisitedOrders(Integer user_id);


    /**
     * 更新订单信息
     * @param order 订单信息
     * @return 是否更新成功
     */
    int updateOrder(Integer orderId, OrderBean order);
}
